package work.MrSun.xyq.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import work.MrSun.xyq.model.*;
import work.MrSun.xyq.service.*;

import java.util.*;

/**
 * @Author MrSun
 * @Date 2023/4/10 20:29
 */

/**
 * 所有详情信息
 */
@RestController
public class MessageDetailController {

    @Autowired
    private XyqMessageDetailService xyqMessageDetailService;
    @Autowired
    private XyqCommentService xyqCommentService;
    @Autowired
    private XyqUserService xyqUserService;
    @Autowired
    private XyqMessageImagesService xyqMessageImagesService;
    @Autowired
    private XyqCommentReplayService xyqCommentReplayService;

    //得到所有的图片信息
    public List<XyqMessage> getImage(List<XyqMessage> allMessage, XyqUserService xyqUserService, XyqMessageImagesService xyqMessageImagesService) {
        //遍历所有的信息元素
        for (int i = 0; i < allMessage.size(); i++) {
            //使用userId从xyqUserService中获取对应的用户信息，并将设置为当前的用户信息
            allMessage.get(i).setMangoUser(xyqUserService.getById(allMessage.get(i).getUserId()));
            //创建一个图片信息对象
            XyqMessageImages xyqMessageImages = new XyqMessageImages();
            //将其 messageId 设置为当前消息的 messageId。
            xyqMessageImages.setMessageId(allMessage.get(i).getMessageId());
            //获取与当前消息相关联的图片列表，并将其设置为当前消息的 messageImages 属性。
            allMessage.get(i).setMessageImages(xyqMessageImagesService.findList(xyqMessageImages));
        }
        return allMessage;
    }

    //    分页查询消息数据的功能。
    @PostMapping("/getMessage/getAllMessageDetail/{pageNumber}")
    public List<XyqMessage> getAllMessageDetail(@PathVariable Integer pageNumber) {
        //开始分页
        PageHelper.startPage(pageNumber, 5);
        //获取到所有数据
        List<XyqMessage> allMessage = xyqMessageDetailService.getAllMessage();
        //初始化pageInfo
        //获取消息数据，并将其封装到一个 PageInfo 对象中
        PageInfo<XyqMessage> pageInfo = new PageInfo<>(allMessage);
        //在判断当前页面是否超出总页数
        if (pageInfo.getPageNum() < pageNumber) {
            List list1 = new LinkedList();
            list1.add(200);//返回一个200状态码
            return list1;
        }
        //从分页中获取到数据  赋给messages对象
        List<XyqMessage> messages = pageInfo.getList();
        return getImage(messages, xyqUserService, xyqMessageImagesService);
    }


    /**
     * 查看用户的id进行查询详情
     */
    @PostMapping("/getMessageDetailById/{id}")
    public XyqMessage getMessageDetailById(@PathVariable Integer id) {
        //判断具体详情是不是存在的
        XyqMessage xyqMessage = xyqMessageDetailService.getById(id);
        if (xyqMessage == null) {
            return null;
        }
        //初始化评论对象
        XyqComment xyqComment = new XyqComment();
        //设置评论信息的id
        xyqComment.setMessageId(id);
        //找到这些评论
        List<XyqComment> comments = xyqCommentService.findList(xyqComment);
        xyqMessage.setComments(comments);
        //获取这个评论用的id
        XyqUser user = xyqUserService.getById(xyqMessage.getUserId());
        //放在用户信息属性中
        xyqMessage.setMangoUser(user);
        //第二部分
        //消息图片的信息
        XyqMessageImages xyqMessageImages = new XyqMessageImages();
        //通过指定的id获取一条XyqMessage的详细信息
        xyqMessageImages.setMessageId(id);
        xyqMessage.setMessageImages(xyqMessageImagesService.findList(xyqMessageImages));
        //获取到评论
        Integer messageWatch = xyqMessage.getMessageWatch();
        //重新设置所有信息的对象
        XyqMessage xyqMessage1 = new XyqMessage();
        xyqMessage1.setMessageId(id);//设置信息的id
        xyqMessage1.setMessageWatch(messageWatch + 1);//评论数量进行加一
        xyqMessage1.setMessageComment(comments.size());//设置进去评论数
        xyqMessageDetailService.update(xyqMessage1);//调用方法进行数据库中信息的更改
        //如果评论数为0  直接返回xyqMessage对象
        if (comments.size() == 0) {
            return xyqMessage;
        }
        //在这个for循环中遍历评论列表信息
        for (int i = 0; i < comments.size(); i++) {
            XyqCommentReply mangoCommentReply = new XyqCommentReply();
            //设置评论对象的id
            mangoCommentReply.setCommentId(comments.get(i).getCommentId());
            //找到所有的评论
            comments.get(i).setCommentReplies(xyqCommentReplayService.findList(mangoCommentReply));
            comments.get(i).setMangoUser(xyqUserService.getById(comments.get(i).getUserId()));
        }
        //将评论列表设置到xyqMessage的comments属性中，并将其返回
        xyqMessage.setComments(comments);
        return xyqMessage;
    }

    /**
     * 查询分类中的所有信息-----具体信息
     */
    @PostMapping("/getMessage/getAllMessageDetail/{categoryId}/{pageNumber}")
    public List<XyqMessage> getMessageByCategoryId(@PathVariable Integer categoryId,
                                                   @PathVariable Integer pageNumber) {
        //开始分页
        PageHelper.startPage(pageNumber, 8);
        //进行查询符合条件的信息
        List<XyqMessage> messageByCategoryId = xyqMessageDetailService.getMessageByCategoryId(categoryId);
        //进行封装
        PageInfo<XyqMessage> pageInfo = new PageInfo<>(messageByCategoryId);
        if (pageInfo.getPageNum() < pageNumber) {
            LinkedList list = new LinkedList<>();
            list.add(200);
            //返回
            return list;
        }
        //获取到分页的所有信息
        List<XyqMessage> allMessage = pageInfo.getList();
        return getImage(allMessage, xyqUserService, xyqMessageImagesService);
    }

    /**
     * 获取我发布的信息
     * @param userId
     * @param pageNumber
     * @return
     */
    @PostMapping("/getMessage/getMessageDetailByUserId/{userId}/{pageNumber}")
    public List<XyqMessage> getMessageDetailByUserId(@PathVariable Integer userId,
                                                     @PathVariable Integer pageNumber) {
        //根据用户id获取这个发布的用户
        XyqUser user = xyqUserService.getById(userId);
        //判断是不是管理员
        if (user.getUserIsAdmin() == 2) {
            //开始分页  要是管理员每页只能显示五页数据 非管理员是三条数据
            PageHelper.startPage(pageNumber, 5);
            //执行方法进行获取数据
            List<XyqMessage> allMessage = xyqMessageDetailService.getAllMessage();
            //进行封装
            PageInfo<XyqMessage> pageInfo = new PageInfo<>(allMessage);
            //进行获取
            List<XyqMessage> list = pageInfo.getList();
            getImage(list, xyqUserService, xyqMessageImagesService);
            if (pageInfo.getPageNum() < pageNumber) {
                LinkedList list1 = new LinkedList();
                list1.add(200);
                return list1;
            }
            return list;
        } else {
            //如果不是管理员
            //开始分页
            PageHelper.startPage(pageNumber, 3);
            //如果不是管理员只能通过id获取到详细信息
            List<XyqMessage> messageDetailByUserId = xyqMessageDetailService.getMessageDetailByUserId(userId);
            //进行封装
            PageInfo<XyqMessage> pageInfo = new PageInfo<>(messageDetailByUserId);
            //获取数据
            List<XyqMessage> list = pageInfo.getList();
            //获取到图片信息
            getImage(list, xyqUserService, xyqMessageImagesService);
            //进行判断
            if (pageInfo.getPageNum() < pageNumber) {
                //初始化数组
                List list1 = new LinkedList();
                list1.add(2200);
                return list1;
            }
            return list;
        }
    }

}
